// 第一课
//  console.log('HELLO WORLD')


// 第二课
// 刚开始用的是for 循环遍历，然后创建一个全为数字的数组，然后使用reduce方法得出结果值，显然复杂了
// console.log(process.argv)
//   你可以通过 process 这个全局对象来获取命令行中的参数。process 对象
//   拥有一个名为 argv的属性，该属性是一个数组，数组中包含了整条命令的所有部分。
// function sum() { 
//     let result = 0
//     for (let i = 2; i < process.argv.length; i++) {
//       result += Number(process.argv[i])
//     }
//     console.log(result)
// }
// sum()

//第三课
// const fs=require("fs")
// let file=fs.readFileSync(process.argv[2]).toString()
// console.log(file.split('\n').length-1)
// 标准答案：
// const fs = require('fs')

// const contents = fs.readFileSync(process.argv[2])
// const lines = contents.toString().split('\n').length - 1
// console.log(lines)

// 只要把 'utf8' 作为 readFileSync 的第二个参数传入
// 就可以不用 .toString() 来得到一个字符串
//
// fs.readFileSync(process.argv[2], 'utf8').split('\n').length - 1
// 第四课
// const contents = fs.readFile(process.argv[2], 'utf8', (err, data)=>{
//     // 你可以通过检查第一个参数的真假值来判断是否有错误发生。
//       if(err){
//          return console.log(err)
//       }else{
//         console.log(data.split('\n').length - 1)
// })
// 第五课 过滤器 异步方法： fs.readdir()
// const contents = fs.readdir(process.argv[2],  (err, data) => {
//     // 你可以通过检查第一个参数的真假值来判断是否有错误发生。
//     if (err) {
//         return console.log(err)
//     } else {
//         data.forEach(item=>{
//             if(item.includes(`.${process.argv[3]}`)){
//                 console.log(item)
//             }
//         })

//     }
// })
// 第六课 模块化
// const my_module = require('./my_module.js')
// my_module(process.argv[2], process.argv[3], (err, data) => {
//     if (err) {
//         return console.log(err)
//     }else{
//         data.forEach(item=>{
//             console.log(item)
//         })
//     }
// })

// 编写一个程序来发起一个 HTTP GET 请求，所请求的 URL
// 为命令行参数的第一个。然后将每一个 "data"
// 事件所得的数据，以字符串形式在终端（标准输出 stdout）的新的一行打印出来。
// const http = require('http');
// http.get(process.argv[2],(response)=>{
//   response.setEncoding('utf8');
//   let result=''
//   response.on('data', (data)=>{ 
//     //   处理请求结果
//     result += data;
//   })
//   response.on('error', console.error);
// //   监听请求结束
//   response.on('end', ()=>{
//     console.log(result.length);
//     console.log(result);
//   });
// })
// 异步
// let result = ['', '', ''];
// http.get(process.argv[2], (response) => {
//     response.on('data', (data) => {
//         result[0] += data
//     })
//     response.on('end', () => {
//         if (result[0].length > 0) {
//             console.log(result[0])
//         }
//     })
// })
// http.get(process.argv[3], (response) => {
//     response.on('data', (data) => {
//         result[1] += data
//     })
//     response.on('end', () => {
//         if (result[1].length > 0) {
//             console.log(result[1])
//         }
//     })
// })
// http.get(process.argv[4], (response) => {
//     response.on('data', (data) => {
//         result[2] += data
//     })
//     response.on('end', () => {
//         if (result[2].length > 0) {
//             console.log(result[2])
//         }
//     })
// })
// 连接tcp
// const net = require('net')
// const server = net.createServer(function(socket){
//     let myDate = new Date();
//     let year = myDate.getFullYear();    //年
//     let mouth =  myDate.getMonth()<10?`0${myDate.getMonth() + 1}`:myDate.getMonth() + 1;    //月
//     let date = myDate.getDate()<10?`${myDate.getDate()}`:myDate.getDate();        //日
//     let hours =myDate.getHours()<10?`0${myDate.getHours()}`: myDate.getHours();      //时
//     let minutes = myDate.getMinutes()<10?`0${myDate.getMinutes()}`:myDate.getMinutes();  //分
//     let data = `${year}-${mouth}-${date} ${hours}:${minutes}`
//     socket.write(data)
//     socket.end('\n'); 

// })
// server.listen(process.argv[2])
// const http = require('http')
// const fs = require("fs")
// const server = http.createServer((req, res) => {
//  res.writeHead(200, { 'content-type': 'text/plain' })

//  fs.createReadStream(process.argv[3]).pipe(res)
// })
// server.listen(process.argv[2])